package com.tripcube.ai.service;

import com.tripcube.ai.model.dto.RagChatDTO;
import com.tripcube.ai.model.vo.BaseChatVO;
import org.springframework.ai.chat.messages.Message;
import reactor.core.publisher.Flux;

import java.util.List;

/**
 * RAG聊天服务接口
 * 集成知识库检索功能的聊天服务
 * 
 * @author tripcube
 * @date 2024-01-20
 */
public interface RagChatService {
    
    /**
     * RAG聊天 - 基于知识库检索增强的对话
     * 
     * @param request RAG聊天请求
     * @return 聊天响应
     */
    BaseChatVO ragChat(RagChatDTO request);
    
    /**
     * RAG流式聊天 - 基于知识库检索增强的流式对话
     * 
     * @param request RAG聊天请求
     * @return 流式聊天响应
     */
    Flux<String> ragStreamChat(RagChatDTO request);
    
    /**
     * 获取指定会话的消息记录
     * 
     * @param conversationId 会话ID
     * @return 消息列表
     */
    List<Message> getMessages(String conversationId);
    
    /**
     * 清除指定会话的消息记录
     * 
     * @param conversationId 会话ID
     */
    void clearMessages(String conversationId);
    
    /**
     * 基于多个知识库的RAG聊天
     * 
     * @param request RAG聊天请求
     * @param knowledgeBaseIds 知识库ID数组
     * @return 聊天响应
     */
    BaseChatVO ragChatWithMultipleKnowledgeBases(RagChatDTO request, String[] knowledgeBaseIds);
}